import type { Site } from '@/api/SiteApi.ts'
import type { SortParam } from '@/api/types/SortParam.ts'
import { httpClient } from '@/config'

export function siteGroupList() {
    return httpClient.send<Array<SiteGroup>>({
        url: '/group',
        method: 'GET',
    })
}

export function createGroup(data: SiteGroup) {
    return httpClient.send<string>({
        url: '/group',
        method: 'POST',
        data,
    })
}

export function updateGroup(data: SiteGroup) {
    return httpClient.send<void>({
        url: '/group',
        method: 'PUT',
        data,
    })
}

export function updateGroupSort(data: Array<SortParam>) {
    return httpClient.send<void>({
        url: '/group/sort',
        method: 'PUT',
        data,
    })
}

export function removeGroup(id: string) {
    return httpClient.send<void>({
        url: '/group/' + id,
        method: 'DELETE',
    })
}


/**
 * 一个站点组
 * <p>
 * 组可以嵌套, 如何解释组依据样式配置 <br>
 * 顶层组可能是菜单, 也可能是分页 <br>
 * 第二级组可能是区域, 也可能是文件夹
 */
export interface SiteGroup {

    /**
     * 账户ID
     */
    accountId?: number;

    /**
     * 子分组
     */
    children?: SiteGroup[];

    /**
     * 描述信息, 可空 非 null
     */
    description: string;

    /**
     * 图标
     */
    icon: string;

    /**
     * ID
     */
    id: string | null;

    /**
     * 名字
     */
    name: string;

    /**
     * 父级ID
     */
    parentId?: number;

    /**
     * 组内包含的站点
     */
    siteList?: Site[];

    /**
     * 排序
     */
    sort: number;

    /**
     * 版本
     */
    version?: number;
}
